/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio;

import clases.ActividadVO;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import org.hibernate.annotations.IndexColumn;

/**
 *
 * @author Alex
 */
@Entity
public class Actividad implements Serializable{
    private ListActividad listActividad;
    public static enum TipoRepeticion{DIA, SEMANA, MES, ANIO}
    public static enum SemanaMes{DIA_DE_LA_SEMANA, DIA_DEL_MES}

    private Integer id;
    private String nombre;
    private Date inicio;
    private Date fin;
    private TipoRepeticion tipoRepeticion;
    private int cantidad;
    private SemanaMes semanaMes;
    private List<String> dias = new ArrayList<String>();
    private boolean recordatorio;

    public Actividad() {
    }

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public int getCantidad() {
        return cantidad;
    }

    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

    @org.hibernate.annotations.CollectionOfElements(fetch=FetchType.EAGER)
    @IndexColumn(name="indice")
    public List<String> getDias() {
        return dias;
    }

    public void setDias(List<String> dias) {
        this.dias = dias;
    }

    @Temporal(javax.persistence.TemporalType.DATE)
    public Date getFin() {
        return fin;
    }

    public void setFin(Date fin) {
        this.fin = fin;
    }

    @Temporal(javax.persistence.TemporalType.DATE)
    public Date getInicio() {
        return inicio;
    }

    public void setInicio(Date inicio) {
        this.inicio = inicio;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public boolean isRecordatorio() {
        return recordatorio;
    }

    public void setRecordatorio(boolean recordatorio) {
        this.recordatorio = recordatorio;
    }

    public SemanaMes getSemanaMes() {
        return semanaMes;
    }

    public void setSemanaMes(SemanaMes semanaMes) {
        this.semanaMes = semanaMes;
    }

    public TipoRepeticion getTipoRepeticion() {
        return tipoRepeticion;
    }

    public void setTipoRepeticion(TipoRepeticion tipoRepeticion) {
        this.tipoRepeticion = tipoRepeticion;
    }

    public void addNuevo(ActividadVO nuevoVO){
        //Actividad nuevo = new Actividad();
        this.nombre = nuevoVO.getNombre();
        this.inicio = nuevoVO.getInicio();
        this.fin = nuevoVO.getFin();
        switch(nuevoVO.getTipoRepeticion()){
            case 1:
                this.tipoRepeticion = TipoRepeticion.DIA;
            case 2:
                this.tipoRepeticion = TipoRepeticion.SEMANA;
            case 3:
                this.tipoRepeticion = TipoRepeticion.MES;
            case 4:
                this.tipoRepeticion = TipoRepeticion.ANIO;
        }
        this.cantidad = nuevoVO.getCantidad();
        this.dias = nuevoVO.getDias();
        switch(nuevoVO.getSemanaMes()){
            case 1:
                this.semanaMes = SemanaMes.DIA_DE_LA_SEMANA;
            case 2:
                this.semanaMes = SemanaMes.DIA_DEL_MES;
        }
        this.recordatorio = nuevoVO.isRecordatorio();
        System.out.println(this.inicio.toLocaleString());
        System.out.println(this.fin.toLocaleString());
        System.out.println();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Actividad other = (Actividad) obj;
        if ((this.nombre == null) ? (other.nombre != null) : !this.nombre.equals(other.nombre)) {
            return false;
        }
        if (this.inicio != other.inicio && (this.inicio == null || !this.inicio.equals(other.inicio))) {
            return false;
        }
        if (this.fin != other.fin && (this.fin == null || !this.fin.equals(other.fin))) {
            return false;
        }
        if (this.tipoRepeticion != other.tipoRepeticion) {
            return false;
        }
        if (this.cantidad != other.cantidad) {
            return false;
        }
        if (this.semanaMes != other.semanaMes) {
            return false;
        }
        if (this.dias != other.dias && (this.dias == null || !this.dias.equals(other.dias))) {
            return false;
        }
        if (this.recordatorio != other.recordatorio) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 41 * hash + (this.nombre != null ? this.nombre.hashCode() : 0);
        hash = 41 * hash + (this.inicio != null ? this.inicio.hashCode() : 0);
        hash = 41 * hash + (this.fin != null ? this.fin.hashCode() : 0);
        hash = 41 * hash + (this.tipoRepeticion != null ? this.tipoRepeticion.hashCode() : 0);
        hash = 41 * hash + this.cantidad;
        hash = 41 * hash + (this.semanaMes != null ? this.semanaMes.hashCode() : 0);
        hash = 41 * hash + (this.dias != null ? this.dias.hashCode() : 0);
        hash = 41 * hash + (this.recordatorio ? 1 : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "Actividad{" + "id=" + id + "nombre=" + nombre + "inicio=" + inicio + "fin=" + fin + "tipoRepeticion=" + tipoRepeticion + "cantidad=" + cantidad + "semanaMes=" + semanaMes + "dias=" + dias + "recordatorio=" + recordatorio + '}';
    }

    @ManyToOne
    public ListActividad getListActividad() {
        return listActividad;
    }

    public void setListActividad(ListActividad listActividad) {
        this.listActividad = listActividad;
    }

    

}

